﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace luning
{
    class Demo
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入要查看的作业：");
            int key = int.Parse(Console.ReadLine());
            switch (key)
            {
                case 1:
                    Demo01();
                    break;
                case 2:
                    Demo02();
                    break;
                case 3:
                    Demo03();
                    break;
                case 4:
                    Demo04();
                    break;
                case 5:
                    Demo05();
                    break;
                case 6:
                    Demo06();
                    break;
                case 7:
                    Demo07();
                    break;
                case 8:
                    Demo08();
                    break;
                case 9:
                    Demo09();
                    break;
                case 10:
                    Demo10();
                    break;
                default:
                    break;
            }
        }
        public static void Demo01()
        { //输入一行字符串，分别统计出其中英文字母、数字、空格的个数。
            Console.WriteLine("请输入一个字符串：");
            string str = Console.ReadLine();

            int letter = 0;
            int num = 0;
            int WhiteSpaceCount = 0;
            foreach (var a in str)
            {
                if (char.IsLetter(a))
                {
                    letter++;
                }
                else if (char.IsDigit(a))
                {
                    num++;
                }
                else if (char.IsWhiteSpace(a))
                {
                    WhiteSpaceCount++;
                }
            }
            Console.WriteLine("您输入的字符串中，字母有{0}个，数字有{1}个，空格有{2}个", letter, num, WhiteSpaceCount);
            Main(null);
        }
        public static void Demo02()
        { //在 Main 方法中创建一个 double 类型的数组，并在该数组中存入 5 名学生的考试成绩(控制台输入)，计算总成绩和平均成绩。
          //要求使用foreach语句实现该功能.
            double[] arr = new double[5];
            double sum = 0;
            double avg = 0;
            Console.WriteLine("请输入五名学生的成绩：");
            for (int i = 0; i < arr.Length; i++)
            {
                arr[i] = double.Parse(Console.ReadLine());
            }
            foreach (var team in arr)
            {
                sum = sum + team;
            }
            avg = sum / arr.Length;
            Console.WriteLine("总成绩为：" + sum);
            Console.WriteLine("平均分为：" + avg);
            Main(null);
        }
        public static void Demo03()
        {//定义一个方法，实现一维数组的排序功能，从大到小排序。(不要用Array类的方法)
            int[] arr1 = { 99, 85, 74, 63, 52, 41, 30 };
            for (int i = 0; i < arr1.Length; i++)
            {
                for (int j = 0; j < arr1.Length - i - 1; j++)
                {
                    if (arr1[j] > arr1[j + 1])
                    {
                        int mid = arr1[j];
                        arr1[j] = arr1[j + 1];
                        arr1[j + 1] = mid;
                    }
                }
            }
            Console.WriteLine("排序后：");
            foreach (var item in arr1)
            {
                Console.WriteLine(item);
            }
            Main(null);
        }
        public static void Demo04()
        {//实现查找数组元素索引的功能。
         //定义一个数组，然后控制台输入要查找的元素，返回输入值在数组中最后一次出现的位置。
         //若是找不到，请打印找不到。(不要用Array类的方法)
            int[] arr2 = { 9, 8, 7, 6, 5 };
            Console.WriteLine("请输入要查找的元素：");
            int str = int.Parse(Console.ReadLine());
            int a = -1;
            for (int i = 0; i < arr2.Length; i++)
            {
                if (str == arr2[i])
                {
                    a = i;
                }
            }
            if (a == -1)
            {
                Console.WriteLine("您输入的数找不到！");
            }
            else
            {
                Console.WriteLine("您输入的数出现的位置是{0}：", a);
            }
            Main(null);
        }
        public static void Demo05()
        {//打印九九乘法表
            for (int i = 1; i < 10; i++)
            {
                for (int j = 1; j <= i; j++)
                {
                    Console.Write(i + " * " + j + " = " + i * j + "\t");
                }
                Console.WriteLine();
            }
            Main(null);
        }
        public static void Demo06()
        {//用户输入正方形边长，用*打印出空心正方形。
            for (int i = 0; i <= 3; i++)
            {
                if (i < 1 || i == 3)
                {
                    Console.WriteLine("*****");
                }
                else
                {
                    Console.WriteLine("*   *");
                }
            }
            Main(null);
        }
        public static void Demo07()
        {//用户输入正方形边长，用*打印出实心正方形。
            for (int i = 0; i <= 3; i++)
            {
                if (i < 1 || i == 3)
                {
                    Console.WriteLine("*****");
                }
                else
                {
                    Console.WriteLine("*****");
                }
            }
            Main(null);
        }
        public static void Demo08()
        {//打印菱形
         //i为半截行数，j为每一行的行数
            for (int i = 1; i <= 4; i++)
            {
                for (int j = 1; j <= 4 - i; j++)
                {
                    Console.Write(" ");
                }
                for (int j = 1; j <= 2 * i - 1; j++)
                {
                    Console.Write("*");
                }
                Console.WriteLine();
            }
            for (int i = 3; i >= 1; i--)
            {
                for (int j = 1; j <= 4 - i; j++)
                {
                    Console.Write(" ");
                }
                for (int j = 1; j <= 2 * i - 1; j++)
                {
                    Console.Write("*");
                }
                Console.WriteLine();
            }
            Main(null);
        }
        public static void Demo09()
        {//如果一个数组保存元素是有序的（从大到小），向这个数组中插入一个数，使得插入后的数组元素仍然保持有序。
            int[] Array = new int[5] { 81, 91, 18, 3, 14 };
            int[] Array1 = new int[6];
            int temp, index = 0, temp1 = 0;
            for (int i = 0; i < Array.Length - 1; i++)
            {
                for (int k = 0; k < Array.Length - 1 - i; k++)
                {
                    if (Array[k] < Array[k + 1])
                    {
                        temp = Array[k];
                        Array[k] = Array[k + 1];
                        Array[k + 1] = temp;
                    }
                }
            } //给数组Array排序
            for (int p = 0; p < Array.Length; p++)
            {
                Array1[p] = Array[p];
            } //把数组Array内的值过渡到Array1中

            Console.WriteLine("请输入要插入的数字");
            int Number = int.Parse(Console.ReadLine());
            for (int t = 0; t < Array1.Length - 1; t++)
            {
                if (Number > Array1[t])
                {
                    index = t;
                    break;
                }
                else if (Number < Array1[Array1.Length - 2])
                {
                    index = 5;
                    break;
                }
            } // 得到要插入的数在数组内的下标index
            for (int d = Array1.Length - 1; d <= index; d--) //因为0在最后所以是递减的
            {
                //Array1[d] = Array1[d - 1];
                if (d == index + 1)
                {
                    temp1 = Array1[d - 1];
                    Array1[d] = temp1;
                    Array1[d - 1] = Number;
                    break;
                } // 前两步是复制，和下面的作用一样因为会break跳出循环，第三步将数字替换掉前一位
                else if (d > index)
                {
                    temp1 = Array1[d - 1];
                    Array1[d - 1] = Array1[d - 2];
                    Array1[d] = temp1;
                } //不满足第一个if判断时，把最后一个数复制为前一位的数，直到满足第一个if判断
                if (d == index)
                {
                    Array1[d] = Number;
                    break;
                } //当Nubmer大于数组内的所有数，直接将Array[5]改为Number，然后跳出循环
            }
            for (int j = 0; j < Array1.Length; j++)
            {
                Console.Write(Array1[j] + " ");
            } //输出出入了数字并且排好序的数组Array1
        }
        public static void Demo10()
        {//在 Main 方法中创建一个字符串类型的数组，并存入 5 个值，然后将数组中下标是偶数的元素输出。
            int[] arr = { 5, 6, 7, 8, 9 };
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i] % 2 == 0)
                {
                    Console.WriteLine("偶数下标为" + arr[i]);
                }
            }
            Main(null);
        }
    }
}
